package com.parking.common.dao;

import java.util.List;
import java.util.Map;

/**
 * 基础DAO接口定义
 * @param <E> 实体类
 * @param <PK> 实体类主键类型
 */
public interface IBaseDao<E extends java.io.Serializable, PK extends java.io.Serializable> {
	/**
	 * 保存实体对象到数据库
	 * @param entity 实体类
	 */
	public Object save(E entity);
	
	/**
	 * 更新实体对象对应的表记录
	 * @param entity 实体对象
	 */
    public void update(E entity);
    
    /**
     * 统计查询HQL语句记录总数
     * @param hql
     * @return
     */
    public long countAll(String hql, Map<String, Object> params);

    /**
     * 根据HQL语句及条件查询相关记录
     * @param hql
     * @param params
     * @return
     */
    public List<E> find(String hql, Map<String, Object> params);
    
    /**
     * 返回唯一查询结果
     * @param hql 查询HQL语句
     * @param paramlist 查询条件
     * @return
     */
    public E unique(String hql, Map<String, Object> params);
    
    /**
     * 分页条件查询
     * @param hql
     * @param params
     * @param pageSize 每页显示多少条记录
     * @param pageNum 查询起始页(起始页从0开始,小于0返回全部)
     * @return
     */
    public List<E> find(String hql, Map<String, Object> params, int pageSize, int pageNum);
}
